<!-- HTML header for doxygen 1.9.7-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<title>libsir: The Standard Incident Reporter Library</title>
<!-- OpenGraph -->
<meta property="og:title" content="libsir: The Standard Incident Reporter Library">
<meta property="og:description" content="A lightweight, cross-platform C library for information distribution">
<meta property="og:url" content="https://libsir.rml.dev">
<meta property="og:type" content="website">
<meta property="og:image" content="https://libsir.rml.dev/res/libsir-og.png">
<meta name="twitter:card" content="summary_large_image"></meta>
<meta name="twitter:title" content="libsir: The Standard Incident Reporter Library"></meta>
<meta name="twitter:description" content="A lightweight, cross-platform C library for information distribution"></meta>
<meta name="twitter:image" content="https://libsir.rml.dev/res/libsir-og.png"></meta>
<!-- /OpenGraph -->
<!-- favicon -->
<link rel="icon" href="res/libsir-icon.png">
<link rel="icon" href="res/libsir-icon.svg" type="image/svg+xml">
<link rel="manifest" href="res/icons.webmanifest">
<!-- /favicon -->
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="stylesheet.css" rel="stylesheet" type="text/css" />
<link href="rml-navtree.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">libsir<span id="projectnumber">&#160;2.2.6</span>
   </div>
   <div id="projectbrief">Standard Incident Reporter</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search',true);
  $(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('md_docs_2sources_2changelog.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div><div class="header">
  <div class="headertitle"><div class="title">Changelog</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1>2.2.6</h1>
<h2>TBA</h2>
<ul>
<li>TBD</li>
</ul>
<h1>2.2.5</h1>
<h2>November 21, 2024</h2>
<ul>
<li>Improve malloc debugging on OpenBSD, NetBSD, and FreeBSD in the test suite.</li>
<li>Update REUSE metadata to comply with version 3.2 of the REUSE specification.</li>
<li>Update Doxygen to 1.12.0.</li>
<li>Support building with the Cisco OpenOSC (Open Object Size Checking) library.</li>
<li>Add <code>SIR_USE_EOL_CRLF</code> option to use <code>CR</code>+<code>LF</code> line endings.</li>
<li>Add <code>SIR_NO_TEXT_STYLING</code> option to disable all ANSI output styling.</li>
<li>Add new operating system support for PASE for IBM i (OS/400).</li>
<li>Update CI/CD configurations and Docker images.</li>
<li>Improve error checking when building Ch bindings.</li>
<li>Update the list of tested compilers and toolchains.</li>
<li>Eliminate all warnings from current GCC Static Analyzer and Cppcheck.</li>
<li>Miscellaneous documentation updates and corrections.</li>
</ul>
<h1>2.2.4</h1>
<h2>December 23, 2023</h2>
<ul>
<li>Add language bindings for Ch Professional and Python 3.</li>
<li>No longer squelch repeating messages when sent to different levels.</li>
<li>Add support for logging to the Windows Event Log.</li>
<li>Add support for building as WebAssembly/JS with Emscripten.</li>
<li>Add support for building via VSCode Tasks.</li>
<li>Add <code>tags</code> target to Makefile.</li>
<li>Add <code>sirtests++</code> test rig for testing the C++ wrapper.</li>
<li>Add <code>sir_isinitialized</code> convenience function.</li>
<li>Fix bug preventing rolling of <code>./</code>-prefixed log files with no extension.</li>
<li>Add test for rolling <code>./</code>-prefixed log files with no extension.</li>
<li>Add <code>sir_geterrorinfo</code> function for fine-grained error information.</li>
<li>Add a helper script to rebuild all Docker CI images.</li>
<li>Fix potential null pointer dereference in <code>_sir_getchar</code> on Windows.</li>
<li>Fix compilation on AIX when <code>SIR_SELFLOG</code> is enabled.</li>
<li>Add <code>_sir_nprocs</code> function to portably query processor count.</li>
<li>Generate HTML cross-referenced source listing using GNU Global.</li>
<li>Add in-place string mangling utilities:<ul>
<li><code>strreplace</code> - substring replacement</li>
<li><code>strcreplace</code> - counting substring replacement</li>
<li><code>strremove</code> - substring removal</li>
<li><code>strsqueeze</code> - whitespace normalization</li>
<li><code>strredact</code> - substring redaction</li>
</ul>
</li>
<li>Improve test runtime (by reducing test iterations).</li>
<li>Add support for the Embarcadero Athens (RAD Studio 12, BCC 7.70) compiler.</li>
<li>Allow overriding keyword for declaring thread local variables (<code>-D_sir_thread_local=</code>).</li>
<li>Add <code>SIR_NO_SHARED</code> option to disable building or installing shared libraries.</li>
<li>Add support for the CompCert-C and Chamois-CompCert compilers.</li>
<li>Stricter REUSE3/SPDX compliance.</li>
<li>Print thread IDs in hexadecimal format on NetBSD.</li>
<li>Annotate shell scripts to appease ShellCheck.</li>
<li>Add internal <code>strcasestr</code> implementation.</li>
<li>Adjust compiler invocation in GitLab CI configuration.</li>
<li>Improve CI testing on NetBSD and OpenBSD.</li>
<li>Fix usage of automatic dependency information generated during the build.</li>
<li>Update Doxygen to 1.9.8.</li>
<li>Silence some warnings when building on IBM AIX using IBM XL C/C++.</li>
<li>Update tooling and tested toolchains in documentation.</li>
<li>General portability and performance improvements.</li>
<li>General linter and static analyzer conformance improvements.</li>
</ul>
<h1>2.2.3</h1>
<h2>September 8, 2023</h2>
<ul>
<li>Fixed a bug that caused some log file messages to be truncated.</li>
<li>Changed maximum message length to 4 KiB (4096 bytes).</li>
<li>Added support for additional compilers and platforms.</li>
<li>Added Oracle Lint to CI pipeline.</li>
<li>General portability improvements.</li>
<li>General linter and static analyzer conformance improvements.</li>
<li>Now utilizes <code>stdatomic.h</code> under MSVC on version 17.4+ using <code>/experimental:c11atomics</code>.</li>
<li>Added two additional tests.</li>
<li>Optimized the primary code path for some <em>really impressive</em> performance gains. Some samples:</li>
</ul>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Platform   </th><th class="markdownTableHeadNone">Change vs. 2.2.2    </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">macOS 13.5.2 (x86_64)   </td><td class="markdownTableBodyNone">+361% ± 0.13﹪    </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">Arch 6.4.12 (x86_64)   </td><td class="markdownTableBodyNone">+276% ± 0.07﹪    </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">RHEL 9 (x86_64)   </td><td class="markdownTableBodyNone">+256% ± 0.03﹪    </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">Debian 12 (x86_64)   </td><td class="markdownTableBodyNone">+217% ± 0.09﹪    </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">macOS 13.5.1 (AArch64)   </td><td class="markdownTableBodyNone">+213% ± 0.12﹪    </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">Fedora 38 (x86_64)   </td><td class="markdownTableBodyNone">+121% ± 0.05﹪    </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">AIX 7.3 (POWER9)   </td><td class="markdownTableBodyNone">+119% ± 0.07﹪    </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">Debian 12 (AArch64)   </td><td class="markdownTableBodyNone">+100% ± 0.04﹪    </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Windows 11 (x64_64)   </td><td class="markdownTableBodyNone">+87% ± 0.03﹪    </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">FreeBSD 13.2 (x86_x64)   </td><td class="markdownTableBodyNone">+76% ± 0.06﹪    </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Windows 11 (AArch64)   </td><td class="markdownTableBodyNone">+67% ± 0.03﹪    </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">NetBSD 9.3 (ARM/A53)   </td><td class="markdownTableBodyNone">+62% ± 0.18﹪    </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">OpenWrt 23 (MIPS32/74Kc)   </td><td class="markdownTableBodyNone">+6% ± 3.14﹪   </td></tr>
</table>
<h1>2.2.2</h1>
<h2>August 18, 2023</h2>
<ul>
<li>Added support for<ul>
<li>Embarcadero C++ for Windows</li>
<li>GNU/Hurd</li>
<li>Older glibc versions</li>
</ul>
</li>
<li>Updated graphics, fixed typos in Doxygen comments (updated docs)</li>
<li>Fixed some MSVC analyzer warnings</li>
</ul>
<h1>2.2.1</h1>
<h2>July 25, 2023</h2>
<ul>
<li>Many small bug fixes and internal improvements.</li>
<li>Fixed building for IBM AIX using IBM XL C/C++ V16.1.</li>
<li>Fixed building for Haiku using Clang.</li>
<li>Cleaned up all ‑Wmissing‑prototypes&#160;‑Wdouble‑promotion&#160;‑Wfloat‑conversion warnings.</li>
<li>Debug builds now use <code>‑g3</code> on most platforms.</li>
<li>Improved the coverage of the test suite.</li>
<li>Added a new thread pool implementation (not yet used by the library).</li>
</ul>
<h1>2.2.0</h1>
<h2>July 17, 2023</h2>
<ul>
<li>Many new platforms and toolsets are now supported. See <a class="el" href="index.html">the main page</a> for details.</li>
<li><a class="el" href="group__plugins.html">Plugin</a> loader and sample plugin module implemented! In the near future, some standard plugins will be available as part of the library.</li>
<li>Big performance gains through optimization and refactoring.</li>
<li>Much improved support for syslog and added support for macOS' centralized logging facility (os_log). See <a class="el" href="group__publictypes.html#structsir__syslog__dest" title="Configuration for the system logger destination.">sir_syslog_dest</a>.</li>
<li>Support for 256‑color and RGB color modes:<ul>
<li><a class="el" href="group__publicfuncs.html#ga31639aba9a825f957a73689ef509f33d" title="Sets the ANSI color mode for stdio destinations.">sir_setcolormode</a></li>
<li><a class="el" href="group__publicfuncs.html#ga4691e42964819230e1f4b7fdf984ff66" title="Creates a sir_textcolor from red, green, and blue components.">sir_makergb</a></li>
<li><a class="el" href="group__publicfuncs.html#ga1a4726075fbcea9fc311f059e342213f" title="Set new text styling for stdio (stdout/stderr) destinations on a per-level basis.">sir_settextstyle</a></li>
</ul>
</li>
<li>Windows got a lot of love, and support for that platform is better than ever<ul>
<li>A Visual Studio 2022 solution can now be found in the <a href="https://github.com/aremmell/libsir/tree/master/msvs">msvs</a> directory with both <code>x64</code> and <code>arm64</code> configurations</li>
</ul>
</li>
<li>New macros in <a href="https://github.com/aremmell/libsir/blob/master/include/sir/ansimacros.h">sir/ansimacros.h</a> that can be used with libsir or anything that writes to stdio (<em>printf, puts, etc.</em>): <code>printf(RED("Oh lawd, something " ULINE("awful") " has happened!\n");</code></li>
<li>Test suite:<ul>
<li>New and more vigorous tests</li>
<li>Now supports command‑line arguments:<ul>
<li><code>‑‑list</code> : lists all the available tests</li>
<li><code>‑‑only</code>: only run the specified tests</li>
<li><code>‑‑leave‑logs</code>: leave log files behind for examination</li>
<li><code>‑‑wait</code> : wait for keypress before exiting</li>
<li><code>‑‑perf</code> : runs the performance benchmark test (normally skipped)</li>
<li><code>‑‑version</code>: shows the version of libsir the test suite was built with.</li>
</ul>
</li>
</ul>
</li>
<li>Eliminated several bugs and potential memory leaks (<em>Flawfinder, Valgrind, PVS Studio, Clang‑analyzer, Cppcheck</em>)</li>
<li>More specific error codes and better error reporting</li>
<li>New preprocessor defines:<ul>
<li><code>SIR_ASSERT_ENABLED</code>: if defined, libsir calls <code>assert</code> (<em>note that if <code>‑DNDEBUG</code> is present, this becomes a NOOP</em>). If not defined and <code>SIR_SELFLOG=1</code>, libsir writes a red message to stderr containing the condition that would have asserted, along with the file, line, and function. This allows for fine‑grain control over assertions.</li>
<li><code>SIR_NO_SYSTEM_LOGGERS</code>: if defined, system logger support is completely disabled/compiled out. The entry points still exist, but they will return an error that the feature is disabled or unavailable.</li>
<li><code>SIR_NO_PLUGINS</code>: The same as <code>SIR_NO_SYSTEM_LOGGERS</code>, but for the plugin system.</li>
</ul>
</li>
<li>Better and more thorough documentation.</li>
</ul>
<h1>2.1.1</h1>
<h2>May 17, 2023</h2>
<ul>
<li>Fixed crash on macOS when handling OS errors</li>
<li>Added FreeBSD support</li>
<li>Fixed ‑Wstrict‑prototype, ‑Wformat warnings</li>
<li>Fixed bug in Makefile (make clean was not deleting all intermediate files)</li>
<li>Disallow root/sudo running the test suite; some of the tests depend on file permissions being unavailable. </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.9.7-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
  </ul>
</div>
</body>
</html>
